home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 43 / Amiga Format CD43 (1999)(Future Publishing)(GB)(Track 1 of 2)[!][issue 1999-09].iso / -serious- / archivers / xfd / developer / sources / asm / pseudopacker.a < prev    next >
Text File  |  1999-06-14  |  4KB  |  178 lines

  1. * Programmheader
  2. *
  3. *    Name:        Pseudo
  4. *    Author:        SDI
  5. *    Distribution:    PD
  6. *    Description:    XFD external decruncher for Pseudo Packer 1.0
  7. *    Compileropts:    -
  8. *    Linkeropts:    -
  9. *
  10. * 1.0   05.06.99 : first version
  11.  
  12.         INCLUDE    "AINCLUDE:IncDirs.i"
  13.         INCLUDE    "lvo.i"
  14.  
  15.         INCLUDE    "libraries/xfdmaster.i"
  16.         INCLUDE "exec/memory.i"
  17.  
  18.         * head function for tests
  19. *        INCLUDE    "xfdExeHead.a"
  20.  
  21. ForeMan        MOVEQ    #-1,D0
  22.         RTS
  23.  
  24.         DC.L    XFDF_ID
  25.         DC.W    1,0
  26.         DC.L    0,0,S_PseudoP
  27.  
  28.         DC.B    "$VER: Pseudo 1.0 (05.06.1999) by SDI",0
  29. N_PseudoP    DC.B    'Pseudo Packer 1.0',0
  30.         EVEN
  31.  
  32. S_PseudoP    DC.L    0        ;no more slaves
  33.         DC.W    2        ;version
  34.         DC.W    39        ;master version
  35.         DC.L    N_PseudoP    ;name
  36.         DC.W    XFDPFF_ADDR    ;flags
  37.         DC.W    0
  38.         DC.L    RB_PseudoP    ;recog buffer
  39.         DC.L    DB_PseudoP    ;decrunch buffer
  40.         DC.L    0        ;recog segment
  41.         DC.L    0        ;decrunch segment
  42.         DC.W    0,0
  43.         DC.L    $CC+26        ;MinBufSize
  44.  
  45. *************************************************************************
  46. *    Recog buffer function: receives buffer + length in A0/D0    *
  47. *************************************************************************
  48.  
  49. RB_PseudoP    MOVEQ    #0,D0            ; False
  50.  
  51.         CMP.W    #$FFFE,$28(A0)
  52.         BEQ.B    .ShortHead
  53.         LEA    26(A0),A0        * maybe long header
  54. .ShortHead    CMP.L    #$FFFE41FA,$28(A0)
  55.         BNE.B    .No
  56.         CMP.L    #$4CDF7FFF,$68(A0)
  57.         BNE.B    .No
  58.         CMP.L    #$B24667F6,$B4(A0)
  59.         BNE.B    .No
  60.         CMP.L    #$7007611A,$B8(A0)
  61.         BNE.B    .No
  62.         CMP.L    #$E28D6702,$C8(A0)
  63.         BNE.B    .No
  64.         MOVEQ    #1,D0            ; True
  65. .No        RTS
  66.  
  67. *************************************************************************
  68. *    Decrunch buffer function: receives xfdbiBufferInfo in A0    *
  69. *************************************************************************
  70.  
  71. DB_PseudoP    MOVEM.L    D2-D6/A2-A6,-(A7)
  72.         MOVE.L    A0,A5
  73.         MOVE.W    #XFDERR_NOMEMORY,xfdbi_Error(A5)
  74.  
  75.         MOVEA.L    xfdbi_SourceBuffer(A5),A4
  76.         CMP.W    #$FFFE,$28(A4)
  77.         BEQ.B    .ShortHead
  78.         LEA    26(A4),A4        * is long header
  79. .ShortHead    MOVE.L    $48(A4),D0
  80.         SUB.L    $34(A4),D0
  81.         MOVE.L    D0,xfdbi_TargetBufLen(A5)
  82.         MOVE.L    D0,xfdbi_TargetBufSaveLen(A5)
  83.         MOVE.L    xfdbi_TargetBufMemType(A5),D1
  84.         BSET    #MEMB_CLEAR,D1
  85.         MOVEA.L    xfdm_ExecBase(A6),A6
  86.         JSR    _LVOAllocMem(A6)
  87.         MOVE.L    D0,xfdbi_TargetBuffer(A5)
  88.         BEQ.B    .NoMem
  89.  
  90.         MOVE.L    $34(A4),xfdbi_DecrAddress(A5)
  91.         MOVE.L    $22(A4),xfdbi_JmpAddress(A5)
  92.  
  93.         MOVE.L    D0,A3            * start of buffer
  94.         LEA    $130(A4),A0        * source buffer
  95.         ADD.L    $3A(A4),A0
  96.         LEA    PseudoData(PC),A4
  97.         CLR.W    xfdbi_Error(A5)
  98.         BSR.B    D_PseudoP
  99. .NoMem        MOVEM.L    (A7)+,D2-D6/A2-A6
  100.         RTS
  101.  
  102. PseudoData    DC.L    $090A0C0D
  103.  
  104. *************************************************************************
  105. *    decrunch routine - copied from file (a bit modified)        *
  106. *************************************************************************
  107.  
  108. D_PseudoP    MOVEQ    #3,D6
  109.         MOVEQ    #7,D7
  110.         MOVEQ    #1,D5
  111.         MOVEA.L    A3,A2
  112.         MOVE.L    -(A0),D1
  113.         TST.B    D1
  114.         BEQ.B    .Decr1
  115.         BSR.B    .Decr5
  116.         SUBQ.B    #1,D1
  117.         LSR.L    D1,D5
  118. .Decr1        LSR.L    #8,D1
  119.         ADDA.L    D1,A3
  120. .Decr2        BSR.B    .Decr5
  121.         BCS.B    .Decr12
  122.         MOVEQ    #0,D2
  123. .Decr3        MOVEQ    #1,D0
  124.         BSR.B    .Decr8
  125.         ADD.W    D1,D2
  126.         CMP.W    D6,D1
  127.         BEQ.B    .Decr3
  128. .Decr4        MOVEQ    #7,D0
  129.         BSR.B    .Decr8
  130.         MOVE.B    D1,-(A3)
  131.         DBRA    D2,.Decr4
  132.         CMPA.L    A3,A2
  133.         BCS.B    .Decr12
  134.         RTS    
  135. .Decr5        LSR.L    #1,D5
  136.         BEQ.B    .Decr6
  137.         RTS    
  138. .Decr6        MOVE.L    -(A0),D5
  139.         ROXR.L    #1,D5
  140.         RTS    
  141. .Decr7        SUBQ.W    #1,D0
  142. .Decr8        MOVEQ    #0,D1
  143. .Decr9        LSR.L    #1,D5
  144.         BEQ.B    .Decr11
  145. .Decr10        ROXL.L    #1,D1
  146.         DBRA    D0,.Decr9
  147.         RTS    
  148. .Decr11        MOVE.L    -(A0),D5
  149.         ROXR.L    #1,D5
  150.         BRA.B    .Decr10
  151. .Decr12        MOVEQ    #1,D0
  152.         BSR.B    .Decr8
  153.         MOVEQ    #0,D0
  154.         MOVE.B    (A4,D1.W),D0
  155.         MOVE.W    D1,D2
  156.         CMP.W    D6,D2
  157.         BNE.B    .Decr15
  158.         BSR.B    .Decr5
  159.         BCS.B    .Decr13
  160.         MOVEQ    #7,D0
  161. .Decr13        BSR.B    .Decr7
  162.         MOVE.W    D1,D3
  163. .Decr14        MOVEQ    #2,D0
  164.         BSR.B    .Decr8
  165.         ADD.W    D1,D2
  166.         CMP.W    D7,D1
  167.         BEQ.B    .Decr14
  168.         BRA.B    .Decr16
  169. .Decr15        BSR.B    .Decr7
  170.         MOVE.W    D1,D3
  171. .Decr16        ADDQ.W    #1,D2
  172. .Decr17        MOVE.B    (A3,D3.W),-(A3)
  173.         DBRA    D2,.Decr17
  174.         CMPA.L    A3,A2
  175.         BCS.B    .Decr2
  176.         RTS    
  177.         END
  178.